package StringUtils

import (
	"strings"
	"regexp"
)

/**
字符串是否为空
 */
func IsEmpty(str string)(bool){
	if(Trim(str)==""){
		return true
	}else{
		return false
	}
}
/**
字符串是否不为空
 */
func IsNotEmpty(str string)(bool){
	return !IsEmpty(str)
}
/**
初始化一个由c byte构成的，长度为len的字符串
 */
func InitString(c byte,len int)(string){
	var arr []byte
	for i:=0;i<len;i++ {
		arr = append(arr,c)
	}
	return string(arr[:])
}

/**
根据输入的字符串，返回指定长度的String,如果length小于str的长度，则截取指定长度； 如果length大于str的长度，则不足部分用空格补齐
 */
func StrLeftAlign(str string,length int)(string){
	if(len(str)> length){
		var strbyte = []byte(str)
		return string(strbyte[:length])
	}else if(len(str)== length){
		return str
	}else{
		var strbyte = []byte(str)
		for i:= len(str);i<length;i++{
			strbyte = append(strbyte,' ')
		}
		return string(strbyte)
	}
}
/**
根据输入的字符串，返回指定长度的String,如果length小于str的长度，则截取指定长度； 如果length大于str的长度，则不足部分用空格补齐
 */
func StrRightAlign(str string,length int)(string){
	if(len(str)> length){
		var strbyte = []byte(str)
		return string(strbyte[len(str)-length:])
	}else if(len(str)== length){
		return str
	}else{
		var strbyte = []byte(str)
		for i:= len(str);i<length;i++{
			strbyte = append(strbyte,' ')
		}
		return string(strbyte)
	}
}

/**
将一个切片形式的string最终生成逗号分隔的大字符串
 */
func SliceToString(strSlice []string)(string){
	var strbyte = make([]byte,64)
	var hasOne bool = false;
	for _,v := range strSlice {
		if(hasOne){
			strbyte = append(strbyte,',')
		}
		var temp = []byte(v)
		strbyte = append(strbyte,temp...)
		hasOne= true;
	}
	return string(strbyte)
}

/**
将一个逗号分隔的字符串，最终生成一个Slice切片
 */
 func StringToSlice(str string)([]string){
 	var result = make([]string,0,10)
 	var startpos =0;
 	var strbyte = []byte(str)
 	for i:=0;i<len(strbyte);i++ {
 		if(strbyte[i]==','){
 			var currstr = string(strbyte[startpos:i])
			result = append(result,currstr)
			startpos = i+1;
		}
		if(i==len(strbyte)-1){
			var currstr = string(strbyte[startpos:])
			result = append(result,currstr)
		}
	}
	return result
 }

 /**
 判断两个字符串切片是否完全一致，
  */
 func CompareToStrings(str1 []string, str2 []string)(bool){
 	if(str1==nil||str2==nil){
 		return false
	}
	if(len(str1)!=len(str2)){
		return false
	}
	var result bool = true;
	for i := 0;i<len(str1);i++{
		var a = strings.ToUpper(str1[i])
		var b = strings.ToUpper(str2[i])
		if(a!=b){
			result = false
			break
		}
	 }
	return result
 }

/**
对一个字符串进行Trim
 */
func Trim(str string)(string){
	return strings.TrimSpace(str)
}
/**
对一个字符串进行Trim，同时去掉左补0
 */
func TrimZero(str string)(string){
	var temp string = str
	temp = strings.Trim(temp," ")
	temp = strings.Trim(temp,"\t")
	temp = strings.Trim(temp,"\x00")
	temp = strings.TrimLeft(temp,"0")
	return temp
}

/**
字符串填充
 */
func FillString(str string,ch byte,length int,atend bool)(string){
	if(len(str)>=length){
		return str
	}
	var bytes = make([]byte,0,10)
	if(!atend){
		//左补零
		temp := make([]byte,0,10)
		for i:=0;i<length-len(str);i++ {
			temp = append(temp, ch)
		}
		bytes = append(bytes,temp...)
		bytes = append(bytes,[]byte(str)...)
		return string(bytes)
	}else{
		//右补零
		bytes = append(bytes,[]byte(str)...)
		temp := make([]byte,0,10)
		for i:=0;i<length-len(str);i++ {
			temp = append(temp, ch)
		}
		bytes = append(bytes,temp...)
		return string(bytes)
	}
}

/**
判断字符串是否是整数
 */
func IsInteger(str string)(bool){
	var regExp = regexp.MustCompile("^[1-9][0-9]*$")
	return regExp.Match([]byte(str))
}
/**
判断字符串是否是手机号
 */
func IsMobile(str string)(bool){
	var regExp = regexp.MustCompile("^((1[3|8][0-9])|(14[5|7])|(15[^4,\\D])|(17[0|5|6|7|8]))\\d{8}$")
	return regExp.Match([]byte(str))
}

/**
手机号中间4位换成*号
 */
func FormatMobile(str string)(string){
	if(!IsMobile(str)){
		return str
	}
	var strSlice = []byte(str);
	strSlice[3]='*'
	strSlice[4]='*'
	strSlice[5]='*'
	strSlice[6]='*'
	return string(strSlice)
}

/**
截取字符串前length位
 */
func TruncateString(str string,length int,atend bool)(string) {
	if(len(str)> length){
		var strbyte = []byte(str)
		if(!atend){
			return string(strbyte[:length])
		}else{
			return string(strbyte[len(str)-length:])
		}

	}else{
		return str
	}
}